package src.C_io;

import java.io.*;

// 缓冲流
public class Demo11 {
    /*
    缓冲流分为：
        字节缓冲流 和 字符缓冲流
    字节缓冲流分为：
        字节缓冲输入流(BufferedInputStream) 和 字节缓冲输出流(BufferedOutputStream)
        原理：把基本流包装成高级流(只是包装真正做事的还是基本流)，底层自带了长度为 8192字节 的缓冲区提高性能
    字符缓冲流分为：
        字符缓冲输入流(BufferedReader) 和 字符缓冲输出流(BufferedWriter)
    ps：缓冲流可显著提升 字节流 的读写性能，对字符流提升不明显关键的是那两个特有的方法
    */
    public static void main(String[] args) throws IOException {

        // ps: d.txt-[增强(i流)]---[i缓冲区]---b---[o缓冲区]---[增强(o流)]-c.txt
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("src\\C_io\\d.txt"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("src\\C_io\\c.txt"));
        int b;
        byte[] bytes = new byte[1024];
        while ((b = bis.read(bytes)) != -1){
            bos.write(bytes,0,b);
        }
        // 底层会帮我们把基本流关闭，使用我们只需关闭增强流
        bos.close();
        bis.close();

        // 写法思路和前面一样，这里主要介绍 br.readLine() 方法和 bw.newLine() 特有的两个方法
        BufferedReader br = new BufferedReader(new FileReader("src\\C_io\\c.txt"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("src\\C_io\\b.txt"));
        String str;
        while ((str = br.readLine()) != null){  // 读取一行
            bw.write(str);
            bw.newLine(); // 换行（可跨平台通用）
        }
        bw.close();
        br.close();
    }

    /*
    四种方式读写速度顺序：
        基本流单字节读写        慢
        增强流单字节读写
        基本流字节数组读写
        增强流字节数组读写      快
    */
}
